這一題跟昨天的有點類似,昨天是要刪除倒數第N個,今天是要刪除中間那個.
同樣不會給你整個Linked List的長度,所以我們必須用其他方法找出中間那個節點並刪除他.
https://leetcode.com/problems/delete-the-middle-node-of-a-linked-list/
You are given the head of a linked list. Delete the middle node, and return the head of the modified linked list.
The middle node of a linked list of size n is the ⌊n / 2⌋th node from the start using 0-based indexing, where ⌊x⌋ denotes the largest integer less than or equal to x.
Exampl 1:
Input: head = [1,3,4,7,1,2,6]
Output: [1,3,4,1,2,6]
Explanation:
The above figure represents the given linked list. The indices of the nodes are written below.
Since n = 7, node 3 with value 7 is the middle node, which is marked in red.
We return the new list after removing this node.
Example 2:
Input: head = [1,2,3,4]
Output: [1,2,4]
Explanation:
The above figure represents the given linked list.
For n = 4, node 2 with value 3 is the middle node, which is marked in red.
Example 3:
Input: head = [2,1]
Output: [2]
Explanation:
The above figure represents the given linked list.
For n = 2, node 1 with value 1 is the middle node, which is marked in red.
Node 0 with value 2 is the only node remaining after removing node 1.
Constraints:
方法:Two pointer in different speed.
slow 指標一次往前移動一個點,同時fast 指標一次往前移動兩個點,
這樣當fast 指標移動到最後節點,slow 指標剛好指向中間那個節點的前一個節點
Python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def deleteMiddle(self, head: Optional[ListNode]) -> Optional[ListNode]:
if head.next == None:
return None
slow = head
fast = head.next.next
while fast != None and fast.next != None:
slow = slow.next
fast = fast.next.next
slow.next = slow.next.next
return head
Go
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func deleteMiddle(head *ListNode) *ListNode {
if head.Next == nil {
return nil
}
slow := head
fast := head.Next.Next
for fast != nil && fast.Next != nil {
slow = slow.Next
fast = fast.Next.Next
}
slow.Next = slow.Next.Next
return head
}